// 工作中可以直接复制，改一改

// 自动创建路由配置

// 使用require.context
// 1. 一个要搜索的目录，
// 2. 一个标记表示是否还要搜索其子目录，
// 3. 一个匹配文件的正则表达式。

let files = require.context("@/pages",true,/\.vue$/)   // 工作中改路径

// console.log(files.keys());

let repeatRoutes = files.keys().map(path => {
    // console.log(path);
    // 1.需要把path   "./Home/Welcome/index.vue" -->  /Home/Welcome
    // 使用正则过滤掉 /index.vue 或者过滤 .vue
    let regExp = /(\/index\.vue|\.vue)$/
    
    let com = files(path).default;
    path = path.replace(regExp, "").substring(1);
    // console.log(path);

    // console.log(com.meta);
    return{
        // 路由的重定向
        redirect: com.redirect ?? null,
        // 具名路由
        name:com.name ?? path.substring(1).split('/').join('-'),
        meta:com.meta ?? {}, // 路由元信息
        path: path.toLowerCase(),
        component: ()=>import('@/pages' + path)   // 工作中改路径
    }
})
// console.log(repeatRoutes);// 扁平化路由配置

// 需要把repeatRoutes 转换成‘树形’数据
const convertTree = (repeatRoutes) => {
    // 每条数据添加id，如果是嵌套路由，那么加上pid

    let treeRoues = []; // 声明一个空数组用于存放树形的routes配置

    // 时间复杂1度0（n^2）
    // 遍历repeatRoutes，对数据的id进行处理
    repeatRoutes.forEach(route => {
        // 将path作为对象的id
        let pathArr = route.path.substring(1).split('/');
        // 给每个对象生成id
        route.id = pathArr.join('-')
        // console.log(pathArr)
        // 如果数组中的长度大于1，说明是子路由，需要添加pid(父id)
        if(pathArr.length > 1){
            // pid就是，parentid 父级id，数组中的最后一项去掉，就是父级id
            let pidArr = [...pathArr]  // 浅拷贝；
            pidArr.pop()
            route.pid = pidArr.join('-')
        }
    })
    // 把平铺数据，变成嵌套的树形数据
    repeatRoutes.forEach(route =>{
        // 找数据的pid和数据id相等的项
        let parent = repeatRoutes.find(v => v.id === route.pid)
        // console.log(parent);
        if(parent){
            // 当前的route对象，找到父节点
            // 判断父节点有没有children属性，如果没有就创建
            if(!parent.children){
                parent.children = []
            }
            route.path = route.path.split('/').pop()
            parent.children.push(route)
        }else{
            treeRoues.push(route)
        }
    })
    return treeRoues
}
let result = convertTree(repeatRoutes);
// console.log(result);

export default result